package binary;

public class Demo {
    public static void main(String[] args) {
        /*
        java中显示一个二进制
        1 java在编译器间将数字转换成二进制
        2 运行期间i的值始终是二进制
        3 显示i的值的时候java将二进制转换成10进制输出
         java中除了二进制  其他进制都用字符串表示
        4jiava提供了一个API,Integer,toBinaryString()
         此方法可以将一个int在内存的二进制显出出来
         二进制运算符
         ~  取反   ~-130 = 129;
         &  与运算
            基本运算规则:逻辑乘法有0则0
                       运算时候将两个整数对齐位,对应的位进行 & 运算
                       n      =   01110011  10011111  01101111  01110101
                       m      =   00000000  00000000  00000000  11111111
                       k=a&b      00000000  00000000  00000000  01110101
                       意义   n的最后八位数,被截取储存到了k,上述运算的本质是将一个整数的最后八位拆分
                       m数经常是从低位到高位连续n个1,将这个数称为"掩码"(Mask)
         |  或运算
            基本运算规则:逻辑加法 有1则一,运算时候将两个整数对齐位进行或运算
                    n =     00000000 00000000 00000000 10110100
                    m =     00000000 00000000 10110100 00000000
                    k=m|n   00000000 00000000 10110100 10110100
                    如此运算的意义:错位合并或者错位拼接

         >>>   右移位
            运算规则:将二进制数整体向右移动,低位自动溢出,高位补充0,其运算目的,就是将数字整体向右移动不关心
            是否满足数学除法的结果
                      n       =   01110011  10011111  01101111  01110101
                      m = n>>>1   001110011  10011111  01101111  01110101
                                  ↑在最前增加一位或者多位                   ↑最后一位或者多位溢出删除
         >>    数学右移位
            数学右移位  将数字整体向右移动,低位溢出 正数时候高位为0 补0 负位时候高位补1 补1 每移动一次相当
            于数学除以二然后向小方向取整数 可以用于替换 除以2的整次方运算
         <<    左移位
            将二进制数字整体向左移动,高位自动溢出,低位补0
            二进制向左移动数值扩大两倍
            二进制向右移动数值缩小两倍

         */
//        int b1 =    0b0000_0000_0000_1111;
//        int b2 =    0b0000_0000_1111_0000;
//        int b3 =    0b0000_1111_0000_0000;
//        int b4 =    0b1111_0000_0000_0000;
//        int b5=  (b1<<8) |(b2<<12) | (b3<<8) | (b4>>>16);
//        System.out.println(Integer.toBinaryString(b5));





//        Random rand = new Random();
//
//        int a ;
//        a = rand.nextInt(200);
//        System.out.println(a);
//        System.out.println(Integer.toBinaryString(a));
//        for (int j = 0; j <200 ; j++) {
//            Integer.toBinaryString(a);
//        }
        //右位移
//        int n =0b0100_1111_0000_1111_1111_1100;
//        int m =(n>>>2) & 0xf;
//        System.out.println(Integer.toBinaryString(m));
//        int d =(n>>>2) & 0xff;
//        System.out.println(Integer.toBinaryString(d));
//        int e =(n>>>2) & 0xfff;
//        System.out.println(Integer.toBinaryString(e));
//        int s =(n>>>2) & 0xffff;
//        System.out.println(Integer.toBinaryString(s));










//        int m = n>>>1;
//        System.out.println(Integer.toBinaryString(m));
//        int c= n>>>4;
//        System.out.println(Integer.toBinaryString(c));
//        int d= n>>>8;
//        System.out.println(Integer.toBinaryString(d));




    }
}
